﻿using System;

namespace Nomo.CoreModule
{
    /// <summary>
    /// 表示无法找到类或结构的构造函数时的异常。
    /// </summary>
    public class ConstructorNotFoundException : SystemException
    {
        private Type Type { get; set; }

        /// <summary>
        /// 用无法找到构造函数的类或结构的 <see cref="System.Type"/> 对象初始化 <see cref="ConstructorNotFoundException" /> 类的新实例。
        /// </summary>
        /// <param name="type"></param>
        public ConstructorNotFoundException(Type type) : base($"{(type != null ? $"无法找到 [{type.Assembly}].{type.FullName} {(type.IsValueType ? "结构" : "类")}的构造函数，可能是由于构造函数在代码被转换为底层语言的过程被剔除了。要解决此问题，请参考应用程序特定的剔除规则和剔除避免说明。" : $"请使用有效的 {nameof(System.Type)} 对象初始化 {nameof(ConstructorNotFoundException)} 类的新实例！")}")
        {
            Type = type;
        }

        /// <inheritdoc />
        public override string ToString()
        {
            return $"{nameof(Type)}: {Type}, {base.ToString()}";
        }
    }
}
